//类型参数化->泛型

//在定义这个函数时，我不决定这些参数的类型
//而是让调用者以参数的形式告知，我这里的函数参数应该是什么类型

function sum<Type>(num: Type): Type {
  return num
}

//1.调用明确传入类型
sum<number>(20)
sum<{ name: string }>({ name: "yzh" })
sum<any[]>(["111", "222"])

//2.调用时类型推到
sum(50)
sum("abc")